/**
 * SOP模块 - 统计分析API
 * @description 统计分析相关的API接口定义
 * @author AI Assistant
 * @since 1.0.0
 */

import request from '@/config/axios'
import type {
  ApiStatisticsVO,
  ApiStatisticsReqVO,
  MerchantStatisticsVO,
  MerchantStatisticsReqVO,
  ErrorStatisticsVO,
  ErrorStatisticsReqVO,
  TrendAnalysisVO,
  TrendAnalysisReqVO
} from './types'

/**
 * 获取API调用统计
 * @param params 统计查询参数
 * @returns API调用统计数据
 */
export const getApiStatisticsApi = (params: ApiStatisticsReqVO): Promise<ApiStatisticsVO[]> => {
  return request.get({ url: '/sop/statistics/api-statistics', params })
}

/**
 * 获取商户统计
 * @param params 统计查询参数
 * @returns 商户统计数据
 */
export const getMerchantStatisticsApi = (
  params: MerchantStatisticsReqVO
): Promise<MerchantStatisticsVO[]> => {
  return request.get({ url: '/sop/statistics/merchant-statistics', params })
}

/**
 * 获取错误统计
 * @param params 统计查询参数
 * @returns 错误统计数据
 */
export const getErrorStatisticsApi = (
  params: ErrorStatisticsReqVO
): Promise<ErrorStatisticsVO[]> => {
  return request.get({ url: '/sop/statistics/error-statistics', params })
}

/**
 * 获取趋势分析
 * @param params 趋势分析查询参数
 * @returns 趋势分析数据
 */
export const getTrendAnalysisApi = (params: TrendAnalysisReqVO): Promise<TrendAnalysisVO[]> => {
  return request.get({ url: '/sop/statistics/trend-analysis', params })
}

/**
 * 获取实时统计数据
 * @param params 查询参数
 * @returns 实时统计数据
 */
export const getRealtimeStatisticsApi = (params?: {
  appId?: string
  merchantNo?: string
}): Promise<{
  currentOnlineUsers: number // 当前在线用户数
  todayTotalCalls: number // 今日总调用次数
  todaySuccessCalls: number // 今日成功调用次数
  todayFailCalls: number // 今日失败调用次数
  todaySuccessRate: number // 今日成功率(%)
  currentHourCalls: number // 当前小时调用次数
  avgResponseTime: number // 平均响应时间(毫秒)
  peakConcurrency: number // 峰值并发数
}> => {
  return request.get({ url: '/sop/statistics/realtime', params })
}

/**
 * 获取API性能排行
 * @param params 查询参数
 * @returns API性能排行数据
 */
export const getApiPerformanceRankingApi = (params: {
  merchantNo?: string
  dateRange: [string, string] // 日期范围(必填)
  sortBy: string // 排序字段: callCount-调用次数 avgExecuteTime-平均执行时间 successRate-成功率
  sortOrder: string // 排序方式: asc-升序 desc-降序
  limit?: number // 返回数量限制，默认20
}): Promise<
  Array<{
    apiPath: string // API路径
    callCount: number // 调用次数
    successCount: number // 成功次数
    failCount: number // 失败次数
    successRate: number // 成功率(%)
    avgExecuteTime: number // 平均执行时间(毫秒)
    maxExecuteTime: number // 最大执行时间(毫秒)
    minExecuteTime: number // 最小执行时间(毫秒)
    totalDataSize: number // 总数据量(字节)
  }>
> => {
  return request.get({ url: '/sop/statistics/api-performance-ranking', params })
}

/**
 * 获取商户活跃度排行
 * @param params 查询参数
 * @returns 商户活跃度排行数据
 */
export const getMerchantActivityRankingApi = (params: {
  dateRange: [string, string] // 日期范围(必填)
  limit?: number // 返回数量限制，默认20
}): Promise<
  Array<{
    merchantNo: string // 商户编号
    merchantName?: string // 商户名称
    totalCalls: number // 总调用次数
    successCalls: number // 成功调用次数
    failCalls: number // 失败调用次数
    successRate: number // 成功率(%)
    avgExecuteTime: number // 平均执行时间(毫秒)
    activeApps: number // 活跃应用数
    lastCallTime: string // 最后调用时间
    activityScore: number // 活跃度评分
  }>
> => {
  return request.get({ url: '/sop/statistics/merchant-activity-ranking', params })
}

/**
 * 获取地域分布统计
 * @param params 查询参数
 * @returns 地域分布统计数据
 */
export const getGeographicDistributionApi = (params: {
  appId?: string
  merchantNo?: string
  dateRange: [string, string] // 日期范围(必填)
}): Promise<
  Array<{
    region: string // 地区
    province?: string // 省份
    city?: string // 城市
    callCount: number // 调用次数
    successCount: number // 成功次数
    failCount: number // 失败次数
    successRate: number // 成功率(%)
    uniqueIps: number // 独立IP数
  }>
> => {
  return request.get({ url: '/sop/statistics/geographic-distribution', params })
}

/**
 * 获取设备统计
 * @param params 查询参数
 * @returns 设备统计数据
 */
export const getDeviceStatisticsApi = (params: {
  appId?: string
  merchantNo?: string
  dateRange: [string, string] // 日期范围(必填)
}): Promise<{
  browsers: Array<{
    // 浏览器统计
    browser: string // 浏览器名称
    version: string // 版本
    callCount: number // 调用次数
    percentage: number // 占比(%)
  }>
  operatingSystems: Array<{
    // 操作系统统计
    os: string // 操作系统
    version: string // 版本
    callCount: number // 调用次数
    percentage: number // 占比(%)
  }>
  devices: Array<{
    // 设备类型统计
    deviceType: string // 设备类型: desktop-桌面 mobile-移动 tablet-平板
    callCount: number // 调用次数
    percentage: number // 占比(%)
  }>
}> => {
  return request.get({ url: '/sop/statistics/device-statistics', params })
}

/**
 * 获取异常监控数据
 * @param params 查询参数
 * @returns 异常监控数据
 */
export const getAnomalyMonitoringApi = (params: {
  appId?: string
  merchantNo?: string
  dateRange: [string, string] // 日期范围(必填)
}): Promise<{
  errorSpikes: Array<{
    // 错误激增
    time: string // 时间点
    errorCount: number // 错误数量
    errorRate: number // 错误率(%)
    threshold: number // 阈值
  }>
  slowRequests: Array<{
    // 慢请求
    time: string // 时间点
    avgExecuteTime: number // 平均执行时间(毫秒)
    slowRequestCount: number // 慢请求数量
    threshold: number // 阈值(毫秒)
  }>
  trafficAnomalies: Array<{
    // 流量异常
    time: string // 时间点
    callCount: number // 调用次数
    expectedCount: number // 预期调用次数
    anomalyScore: number // 异常评分
  }>
}> => {
  return request.get({ url: '/sop/statistics/anomaly-monitoring', params })
}

/**
 * 导出统计报告
 * @param params 导出参数
 * @returns 导出文件
 */
export const exportStatisticsReportApi = (params: {
  reportType: string // 报告类型: api-API统计 merchant-商户统计 error-错误统计 trend-趋势分析
  appId?: string
  merchantNo?: string
  dateRange: [string, string] // 日期范围(必填)
  format?: string // 导出格式: excel-Excel pdf-PDF，默认excel
}): Promise<void> => {
  return request.download({
    url: '/sop/statistics/export-report',
    params
  })
}
